基于Spark和Hive进行的豆瓣电影数据分析 |
您所在的位置:网站首页 › 电影分析 论文 › 基于Spark和Hive进行的豆瓣电影数据分析 |
写在前边的话:
算是自己做的一个小课题吧,自己搭建平台,自己爬取数据,自己进行数据清洗和分析,自己进行可视化展示,写这篇博客不为别的,只是记录下自己做这个课题的整个过程,大神们勿喷 环境说明:hadoop2.7集群,包含Hbase,Hive,Spark,Sqoop,Mahout组件 过 程:平台部署->数据采集-> 数据存储->数据ETL->数据分析->可视化 课题github地址:https://github.com/Thinkgamer/Douban_Movies_Analysi (主要是源代码部分) 1:平台部署 看之前的博客:点击阅读 2:数据采集 数据来源,豆瓣电影,以Tag采集入口,对应标签采集对应的电影,使用Python3.4.3 + BeautifulSoup4.4.1 + urllib进行数据 的采集,本地存储形式为csv格式,代码结构为 -DouBan-Spider #项目根目录 ----download #下载网页源代码模块 --------__init__.py -------down_html.py ----fileoutput #文件输出保存路径 ----output #将抓取的内容写入文件 --------__init__.py --------output_all.py ----parase #解析网页代码 --------__init__.py --------parase_html.py ----urlmanager #链接管理 --------__init__.py --------manage_url.py ----main 数据保存格式(csv文件)
category.csv,两列(标签name,对应的电影数目) movie.csv,10列(电影ID,名字,导演,编剧,类型,主演,上映时间,时长,评论人数,豆瓣评分) movie_summary.txt,两列(电影ID,剧情摘要) 首先爬取的数据是存储在本地电脑上的,我们将其上传至HDFS,作为原始数据存储 上传至HDFS: bin/hdfs dfs -put /home/master/桌面/*.csv /file/douban_movie_data bin/hdfs dfs -put /home/master/桌面/*.txt /file/douabn_movie_data web查看显示为:
PS:这里要注意的是,这样不做任何处理直接加载到hive表中,在进行终端查询时会出现乱码情况 解决办法:将本地文件另存为UTF-8格式,然后再进行导入到Hive中 #创建category数据表 create table movie_category( cate_name string, cate_count int ) comment "this table about movie category" row format delimited fields terminated by ","; #将category.csv加载到表中 load data inpath '/file/douabn_movie_data/category.csv' into table movie_category;2) 对movie_links.csv 进行预处理,提取出id,进行hive的两列式存储 预处理 #-*-codinf:utf-8-*- fp_w = open("new_movies_links.csv","a") with open("movies_links.csv" ,"r") as fp: links = fp.readlines() for link in links: id = link.strip().split("/")[-2] href = link fp_w.write(id+"," +href) fp_w.close() print "ETL OK" 创建表movie_links,并载入数据
#创建表movie_links create table movie_links( id int, href string ) comment "this table about every movie links" row format delimited fields terminated by ","; #从本地加载数据 load data local inpath "/home/master/mycode/new_movies_links.csv" into table movie_links; 3) 对movie.csv进行预处理,并存入hive 预处理 # -*-coding:utf-8-*- #encoding="utf-8" 保证导入hive之后查询时不会出现中文乱码 fp_w = open("new_movies_load.csv","a",encoding="utf-8") with open("movie.csv","r") as fp_r: for line in fp_r.readlines(): movies=line.strip().split(",") s = "" #对上映时间进行处理 try: year = int(movies[6].replace("/","-").split("-")[0]) except: yesr = "" try: month = int(movies[6].replace("/","-").split("-")[1]) except: month = "" movies[6] = str(year) + "," + str(month) for m in movies: s += m+"," fp_w.write(s[:-1]+"\n") print("OK !!!") fp_w.close() 创建movie_message表,并加载数据
#创建存储表 create table movie_message( id int, title string, daoyan array, bianju array, leixing array, zhuyan array, year int, month int, shichang int, disnum int, score float ) comment "this table about movie's message" row format delimited fields terminated by "," collection items terminated by '/'; #加载数据 load data local inpath "/home/master/mycode/new_movies_load.csv" into table movie_message; 4) 创建movie_summary表,并加载数据 #加载数据 load data local inpath "/home/master/mycode/new_movies_load.csv" into table movie_message; #创建剧情摘要表 create table movie_summary( id int, summary string ) comment "this table about movie summary" row format delimited fields terminated by "\t"; #加载数据 load data local inpath "/home/master/mycode/movie_summary.txt" into table movie_summary; 5) 影评数据存入表中(以大鱼海棠为例,下边也将以大鱼海棠作为分析入口) 5:数据分析 1):电影类别统计 根据标签和对应的电影数目,进行Top10显示,如下:
3):厉年影片数量走势图
首先将影评信息进行初步的ETL存入hive数据表,方便分析时直接导出需要的列即可,下面直接给出分析结果,代码和源文件参考github,链接在博客开头已给出。 (1):影价等级比例 ![]() 内容为”这篇影评可能有剧透“在所有的影评中所占的比例 hive中执行: select round(sum(case when content="这篇影评可能有剧透" then 1 else 0 end)/count(*),2) from yingping_dayu;结果为:0.43
内容为”这篇影评可能有剧透“在每天中的数目变化 我们可以将影评变化和剧透影评在一张图上显示如下: 这个部分主要是针对每个影评进行自动评级,豆瓣电影对影评的评级分为五个等级('很差','较差','还行','推荐','力荐'),这里使用的是朴素贝叶斯分类算法,首先对每个等级的影评进行分词,提取高频词作为分类的依据 第一步:针对影评的等级和影评内容分词并写入相应的文件 代码就不贴了(github上有),处理结果如下: 0代表很差,依次类推,5代表力荐 第二步:结合朴素贝叶斯算法和以上的数据,进行学习分类 把需要分类的影评写入test.txt文件,然后运行程序,结果显示如图(红色部分为中文分词的过程,不必理会): 需要说明的是,这里分类的效果很差,原因是豆瓣影评分级的依据是自己提取的高频词,但是从某种程度上说,这是不靠谱的,如果大家有什么好的意见可以提一下,一起学习。
附:分享一个针对豆瓣电影数据做的比较好看的可视化web展示: http://zhanghonglun.cn/data-visualization/ 但是上边的链接所展示的不足之处为数据为静态的,即不能实时的从豆瓣获取数据,而且展示的数据维度比较单一 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |